// 在代码头部引入包
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import clear from "rollup-plugin-clear";
import screeps from "rollup-plugin-screeps";
import copy from "rollup-plugin-copy";
import { terser } from "rollup-plugin-terser";
import typescript from "rollup-plugin-typescript2";
import filesize from "rollup-plugin-filesize";

let config;
// 根据指定的目标获取对应的配置项
if (!process.env.DEST) console.log("未指定目标, 代码将被编译但不会上传");
else if (!(config = require("./.secret.json")[process.env.DEST])) {
    throw new Error("无效目标，请检查 secret.json 中是否包含对应配置");
}

// 根据指定的配置决定是上传还是复制到文件夹
const pluginDeploy =
    config && config.copyPath
        ? // 复制到指定路径
        copy({
            targets: [
                {
                    src: "dist/main.js",
                    dest: config.copyPath
                },
                {
                    src: "dist/main.js.map",
                    dest: config.copyPath,
                    rename: (name) => name + ".map.js",
                    transform: (contents) =>
                        `module.exports = ${contents.toString()};`
                }
            ],
            hook: "writeBundle",
            verbose: true
        })
        : // 更新 .map 到 .map.js 并上传
        screeps({ config, dryRun: !config });

// 获取开发模式还是生产模式
let mode;
console.log(`process.env.MODE=${process.env.MODE}`);
if (!process.env.MODE) {
    console.log("未指定模式，默认选择开发模式");
    mode = "development";
} else {
    mode = process.env.MODE;
}
console.log(`mode=${mode}`);

function production() {
    if (mode === "development") {
        return false;
    }

    return true;
}

export default {
    input: "src/main.ts",
    output: {
        file: "dist/main.js",
        format: "cjs",
        sourcemap: true
    },
    plugins: [
        // 清除上次编译成果
        clear({ targets: ["dist"] }),
        // 打包依赖
        resolve(),
        // 模块化依赖
        commonjs(),
        // 编译ts
        typescript({ tsconfig: "./tsconfig.json" }),

        //压缩
        production() &&
        terser({
            compress: {
                // TODO: 想办法保留errorMapper.js里的log，rollup-plugin-strip？
                drop_console: true
                // pure_funcs: ["console.log"]
            }
        }),

        filesize(),

        // 执行上传或者复制
        pluginDeploy
    ]
};
